#include "sample2.h"
#include "gtest/gtest.h"

namespace {
// In this example, we test the MyString class (a simple string).

// 测试默认构造函数
TEST(MyString, DefaultConstructor) {  // 测试案例： 测试套件， 测试案例：DefaultConstructor
    const MyString s;

    EXPECT_STREQ(nullptr, s.c_string());

    EXPECT_EQ(0u, s.Length());
}

const char kHelloString[] = "Hello, world!";

// 测试带参数的构造函数
TEST(MyString, ConstructorFromCString) {
    const MyString s(kHelloString);
    EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));
    EXPECT_EQ(sizeof(kHelloString) / sizeof(kHelloString[0]) - 1,
              s.Length());
}

// 测试拷贝构造函数构造函数
TEST(MyString, CopyConstructor) {
    const MyString s1(kHelloString);
    const MyString s2 = s1;
    EXPECT_EQ(0, strcmp(s2.c_string(), kHelloString));
}

// 测试方法
TEST(MyString, Set) {
    MyString s;

    s.Set(kHelloString);
    EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));

    s.Set(s.c_string());
    EXPECT_EQ(0, strcmp(s.c_string(), kHelloString));

    // 测试空指针只能使用 nullptr, 不能使用NULL
    s.Set(nullptr);
    EXPECT_STREQ(nullptr, s.c_string());
}
}  // namespace
